package com.nuanshui.heatedloan.fund.biz.dal.mapper;

import com.nuanshui.heatedloan.fund.model.CashingApplyInfo;
import com.nuanshui.heatedloan.fund.model.UserFundAction;
import com.nuanshui.heatedloan.fund.model.UserFundActionDetail;
import com.nuanshui.heatedloan.fund.model.UserRechargeInfo;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;

import java.util.List;


/**
 * 用户资金流动
 * @ClassName: UserFundActionMapper 
 * @author guohao
 * @date Jan 4, 2016 3:26:29 PM 
 *
 */
public interface UserFundActionMapper {
	
	/**
	 * 获取某个 用户的总的资金
	 * @param 
	 * @author guohao
	 * @date Jan 4, 2016 3:33:35 PM
	 * @since 2.3.0
	 */
    Long loadTotalFund(@Param("userId") String userId);
	/**
	 * 保存自己动态
	 * @param 
	 * @author guohao
	 * @date Jan 4, 2016 3:34:16 PM
	 * @sine 2.3.0
	 */
    void saveUserFundAction(UserFundAction userFundAction);
	
	/**
	 * 获取某个用户某中类型的处于某种流转状态的资金动态
	 * @param  userId 用户id
	 * @param actionType 资金流动类型
	 * @param status  流动的状态
	 * @author guohao
	 * @date Jan 4, 2016 3:35:01 PM
	 * @since 2.3.0
	 */

    List<UserFundAction> findByActionType(@Param("userId") String userId, @Param("actionType") Integer actionType, @Param("status") int status, @Param("pager") Pageable pager);
	
	/**
	 * 获取某个用户某中类型的已流转完成的资金动态
	 * @param  userId 用户id
	 * @param actionType 资金流动类型
	 * @author guohao
	 * @date Jan 4, 2016 3:35:01 PM
	 * @since 2.3.0
	 */
    List<UserFundAction> findCompleteUserFundActionByActionType(@Param("userId") String userId, @Param("actionType") Integer actionType);
	
	/**
	 * 根据订单号获取用户充值的记录
	 * @param 
	 * @author guohao
	 * @date Jan 6, 2016 3:05:41 PM
	 * @since 2.3.0
	 */
    UserFundAction loadUserFundByDealNum(@Param("dealNum") String orderNum);
	/**
	 * 更新资金流转流程的状态
	 * @param 
	 * @author guohao
	 * @date Jan 6, 2016 4:05:04 PM
	 */
    void updateUserFundActionStatus(@Param("status") Integer status, @Param("id") String id);
	/**
	 * 更新充值的之否方式
	 * @param 
	 * @author guohao
	 * @date Jan 21, 2016 6:11:43 PM
	 */
    void updateRechargePayType(@Param("payType") String payType, @Param("id") String id);
	
	/**
	 * 保存用户充值的记录信息
	 * @param 
	 * @author guohao
	 * @date Jan 6, 2016 2:27:49 PM
	 */
    void saveUserRechargeInfo(UserRechargeInfo userRechargeInfo);
	
	
	/**
	 * 修改用户充值记录信息的状态
	 * @param 
	 * @author guohao
	 * @date Jan 6, 2016 2:58:09 PM
	 */
    void updateUserRechargeInfoStatus(@Param("orderNum") String orderNum, @Param("status") Integer status);
	
	/**
	 * 更改提现审核状态
	 * @author Junyan2015
	 * @date 2016年1月25日 下午3:08:58
	 * @param fundId 
	 * @param status 更改后状态
	 */
    void updateUserCashingStatus(@Param("fundId") String fundId, @Param("status") Integer status);
	
	/**
	 * 校验是否能更改审核状态
	 * @author Junyan2015
	 * @date 2016年1月25日 下午5:01:35
	 * @param fundId 提现ID
	 */
    Integer validateUserCanbeCashing(@Param("fundId") String fundId);
	
	/**
	 * 根据提现ID获得相关信息
	 * @author Junyan2015
	 * @date 2016年1月25日 下午5:56:21
	 * @param fundId 提现ID
	 * @return
	 */
    CashingApplyInfo findUserFundActionById(@Param("fundId") String fundId);
	
	/**
	 * 管理员获取all users某种类型的处于某种流转状态的资金动态
	 * @author Junyan2015
	 * @date 2016年1月27日 下午3:00:09
	 * @param userId 用户id
	 * @param actionType 资金流动类型
	 * @param status 流动的状态
	 * @param pager
	 * @return
	 */
    List<UserFundAction> findByActionTypeInManager(@Param("userId") String userId, @Param("actionType") Integer actionType, @Param("status") int status, @Param("pager") Pageable pager);
	
	Long getBizIdByFundId(@Param("fundId") String fundId);
	
	Long getFundIdByBizId(@Param("bizId") String bizId);
	
	/**
	 * 保存用户资金流动的详情数据
	 * @param 
	 * @author guohao
	 * @date 2016年3月4日 下午4:25:29
	 */
    void insertFundActionDetail(UserFundActionDetail userFundActionDetail);
	
	/**
	 * 根据交易号获取余额交易详情
	 * @param 
	 * @author guohao
	 * @date 2016年3月4日 下午6:35:07
	 */
    UserFundActionDetail loadUserFundActionDetailByDealNum(String dealNum);
	
	/**
	 * 获取某个订单收取的技术服务费
	 * @param @return
	 * @author guohao
	 * @date 2016年5月3日 下午3:49:17
	 * @since $
	 */
    Long loadSeverChargeByOrderId(@Param("orderId") String orderId);
	
	
	
	
	
}
